//:C05:DelayedInstantiation.cpp
// Member function of class templates are not
// instantiated until they're needed.
class X {
public:
  void f(){}
};

class Y {
public:
  void g(){}
};

template<typename T> class Z {
  T t;
public:
  void a() { t.f(); }
  void b() { t.g(); }
};

int main(void) {
  Z<X> zx;
  zx.a();    // Doesn't create Z<X>::b()
  Z<Y> zy;
  zy.b();    // Doesn't create Z<Y>::a()  
}